/************************************************************
 * Project Name         [Thinking_In_Java]
 * File Name            [ConsoleInput.java]
 * Creation Date        [10-Jul-2014]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ************************************************************/
package pkg_01_console_app.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 该类是一个控制台输入类, 封装了常用的控制台输入方法<br>
 * 包括从控制台输入一个整数, 输入一个字符串, 输入一个浮点数等<br>
 * 该类是将System.in输入流的形式从输入终端(键盘)接收输入的数据, 并将输入的数据转换成期望的格式.
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
public class ConsoleInput {

	private static InputStreamReader isr = new InputStreamReader(System.in); // 接收来自键盘的输入流
	private static BufferedReader br = new BufferedReader(isr); // 对接收的输入流进行缓冲

	/**
	 * 返回一个控制台输入的字符串
	 * 
	 * @param msg
	 * @return 返回一个输入的字符串
	 */
	public static String inputString(String msg) throws IOException {
		String input = "";
		System.out.println(msg);
		input = br.readLine(); // 读取缓冲流的一行
		return input;
	}

	/**
	 * 返回一个控制台输入的整数
	 * 
	 * @param msg
	 * @return 返回一个输入的整数
	 */
	public static int inputInt(String msg) throws IOException,
			NumberFormatException {
		int input = 0;
		System.out.println(msg);
		input = Integer.parseInt(br.readLine()); // 将读入的字符串转换为整数
		return input;
	}

	/**
	 * 返回一个控制台输入的双精度小数
	 * 
	 * @param msg
	 * @return 返回一个输入的双精度小数
	 */
	public static double inputDouble(String msg) throws IOException,
			NumberFormatException {
		double input = 0;
		System.out.println(msg);
		input = Double.parseDouble(br.readLine()); // 将读入的字符串转换为浮点数
		return input;
	}

}
